﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using BackusEntity;
using Backus.Log;
using BackusEntity.BE;

namespace Backus.Data
{
    public class UbigeoDAO
    {
        SqlConnection conexion;
        SqlDataAdapter comando;
        SqlCommand cmd;
        String errores;
        Conexion cn = new Conexion();

        LogManager logManager = new LogManager(System.Configuration.ConfigurationManager.AppSettings["LOG_FILE"].ToString());

        public DataSet obtenerPaises()
        {
            DataSet ds = new DataSet();
            try
            {
                conexion = cn.Conectar();
                comando = new SqlDataAdapter("usp_ObtenerPaises", conexion);
                comando.SelectCommand.CommandType = CommandType.StoredProcedure;
                comando.Fill(ds, "Paises");
            }
            catch (Exception ex)
            {
                errores = ex.Message;
                LogInfo oLogInfo = new LogInfo();
                oLogInfo.Descripcion = "UbigeoDAO " + ex.Message;
                oLogInfo.FechaHora = DateTime.Now;
                oLogInfo.NombreProceso = "obtenerPaises()";
                logManager.FileLog(oLogInfo);
            }
            finally
            {
                conexion.Dispose();
                comando.Dispose();
                ds.Dispose();
            }
            return ds;
        }

        public DataSet obtenerPaisPorCodigo(int codigoPais)
        {
            DataSet ds = new DataSet();
            try
            {
                conexion = cn.Conectar();
                comando = new SqlDataAdapter("usp_ObtenerPaisPorCodigo", conexion);
                comando.SelectCommand.CommandType = CommandType.StoredProcedure;
                comando.SelectCommand.Parameters.Add(new SqlParameter("@idPais", SqlDbType.Int));
                comando.SelectCommand.Parameters["@idPais"].Direction = ParameterDirection.Input;
                comando.SelectCommand.Parameters["@idPais"].Value = codigoPais;
                comando.Fill(ds, "Paises");
            }
            catch (Exception ex)
            {
                errores = ex.Message;
                LogInfo oLogInfo = new LogInfo();
                oLogInfo.Descripcion = "UbigeoDAO " + ex.Message;
                oLogInfo.FechaHora = DateTime.Now;
                oLogInfo.NombreProceso = "obtenerPaisPorCodigo()";
                logManager.FileLog(oLogInfo);
            }
            finally
            {
                conexion.Dispose();
                comando.Dispose();
                ds.Dispose();
            }
            return ds;
        }

        public DataSet obtenerDireccionPorCodigoPais(int codigoPais)
        {
            DataSet ds = new DataSet();
            try
            {
                conexion = cn.Conectar();
                comando = new SqlDataAdapter("usp_ObtenerDireccionPorCodigoPais", conexion);
                comando.SelectCommand.CommandType = CommandType.StoredProcedure;
                comando.SelectCommand.Parameters.Add(new SqlParameter("@idPais", SqlDbType.Int));
                comando.SelectCommand.Parameters["@idPais"].Direction = ParameterDirection.Input;
                comando.SelectCommand.Parameters["@idPais"].Value = codigoPais;
                comando.Fill(ds, "Direcciones");
            }
            catch (Exception ex)
            {
                errores = ex.Message;
                LogInfo oLogInfo = new LogInfo();
                oLogInfo.Descripcion = "UbigeoDAO " + ex.Message;
                oLogInfo.FechaHora = DateTime.Now;
                oLogInfo.NombreProceso = "obtenerDireccionPorCodigoPais()";
                logManager.FileLog(oLogInfo);
            }
            finally
            {
                conexion.Dispose();
                comando.Dispose();
                ds.Dispose();
            }
            return ds;
        }

        public DataSet obtenerCentroPorCodigoDireccion(int codigoDireccion)
        {
            DataSet ds = new DataSet();
            try
            {
                conexion = cn.Conectar();
                comando = new SqlDataAdapter("usp_ObtenerCentroPorCodigoDireccion", conexion);
                comando.SelectCommand.CommandType = CommandType.StoredProcedure;
                comando.SelectCommand.Parameters.Add(new SqlParameter("@idDireccion", SqlDbType.Int));
                comando.SelectCommand.Parameters["@idDireccion"].Direction = ParameterDirection.Input;
                comando.SelectCommand.Parameters["@idDireccion"].Value = codigoDireccion;
                comando.Fill(ds, "Centros");
            }
            catch (Exception ex)
            {
                errores = ex.Message;
                LogInfo oLogInfo = new LogInfo();
                oLogInfo.Descripcion = "UbigeoDAO " + ex.Message;
                oLogInfo.FechaHora = DateTime.Now;
                oLogInfo.NombreProceso = "obtenerCentroPorCodigoDireccion()";
                logManager.FileLog(oLogInfo);
            }
            finally
            {
                conexion.Dispose();
                comando.Dispose();
                ds.Dispose();
            }
            return ds;
        }

        public DataSet obtenerEquipoPorCodigoCentro(string codigoEquipo)
        {
            DataSet ds = new DataSet();
            try
            {
                conexion = cn.Conectar();
                comando = new SqlDataAdapter("usp_ObtenerEquipoPorCodigoCentro", conexion);
                comando.SelectCommand.CommandType = CommandType.StoredProcedure;
                comando.SelectCommand.Parameters.Add(new SqlParameter("@idCentro", SqlDbType.VarChar));
                comando.SelectCommand.Parameters["@idCentro"].Direction = ParameterDirection.Input;
                comando.SelectCommand.Parameters["@idCentro"].Value = codigoEquipo;
                comando.Fill(ds, "Equipos");
            }
            catch (Exception ex)
            {
                errores = ex.Message;
                LogInfo oLogInfo = new LogInfo();
                oLogInfo.Descripcion = "UbigeoDAO " + ex.Message;
                oLogInfo.FechaHora = DateTime.Now;
                oLogInfo.NombreProceso = "obtenerEquipoPorCodigoCentro()";
                logManager.FileLog(oLogInfo);
            }
            finally
            {
                conexion.Dispose();
                comando.Dispose();
                ds.Dispose();
            }
            return ds;
        }

        public List<EquipoBE> obtenerEquipoPorCodigo(int codigoEquipo)
        {
            List<EquipoBE> equipos = new List<EquipoBE>();
            SqlDataReader dr = null;
            try
            {
                conexion = cn.Conectar();
                cmd = new SqlCommand("usp_ObtenerEquipoPorCodigo", conexion);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@idEquipo", SqlDbType.Int));
                cmd.Parameters["@idEquipo"].Direction = ParameterDirection.Input;
                cmd.Parameters["@idEquipo"].Value = codigoEquipo;

                dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    EquipoBE equipo = new EquipoBE();
                    if (dr[0].ToString() != null && dr[0].ToString().Trim().Length > 0)
                        equipo.idEquipo = Convert.ToInt32(dr[0]);
                    if (dr[1].ToString() != null && dr[1].ToString().Trim().Length > 0)
                        equipo.nombreEquipo = dr[1].ToString();
                    if (dr[2].ToString() != null && dr[2].ToString().Trim().Length > 0)
                        equipo.idCentro = dr[2].ToString();
                    equipos.Add(equipo);
                }
            }
            catch (Exception ex)
            {
                errores = ex.Message;
                LogInfo oLogInfo = new LogInfo();
                oLogInfo.Descripcion = "UbigeoDAO " + ex.Message;
                oLogInfo.FechaHora = DateTime.Now;
                oLogInfo.NombreProceso = "obtenerEquipoPorCodigo()";
                logManager.FileLog(oLogInfo);
            }
            finally
            {
                conexion.Dispose();
                cmd.Dispose();
                dr.Close();
            }
            return equipos;
        }
    }
}
